home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
(A)G
/
(A)G11.ADF
/
Cards'O'Rama
/
Sources
/
sources.zoo
/
event.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-25
|
5KB
|
167 lines
/* event.c */
/* */
/* Okay, this is handleevent(): If I call it with a pointer to an */
/* IntuiMessage structure, the events in which I have an interest get */
/* processed and the proper functions are called. */
/* Please note that for a quick reply to an Intuition message, I will */
/* deal with a copy of the original IntuiMessage, so even if I don't */
/* respond to that message very quicly, Intuition won't eat away at my */
/* free memory (for more infos see the PROGRAMMER'S GUIDE TO THE AMIGA */
/* by Robert A. Peck, SYBEX 1987.) */
handleevent(ms)
struct IntuiMessage *ms;
{
struct IntuiMessage localms; /* Our private copy of ms */
int i, result;
UBYTE *s, *d;
s = (UBYTE *)ms; /* Point to the original ms */
d = (UBYTE *)&localms; /* Point to destination */
for (i = 0; i < sizeof(struct IntuiMessage); i++)
*d++ = *s++;
ReplyMsg(ms); /* Reply to the original ms */
/* Okay, from now on I'll work only with this private copy of the */
/* original IntuiMessage... */
switch(localms.Class)
{
case MOUSEBUTTONS:
result = mousebuttons(&localms);
break;
case GADGETUP:
result = gadgetup(&localms);
break;
case MENUPICK:
result = menupick(&localms);
break;
default:
break;
}
return(result);
}
mousebuttons(ms)
struct IntuiMessage *ms;
{
extern int selectbutton;
extern int currentmousex;
extern int currentmousey;
if (ms -> Code == SELECTDOWN)
{
selectbutton = TRUE;
currentmousex = ms -> MouseX;
currentmousey = ms -> MouseY;
return(DUMMY_VALUE);
}
if (ms -> Code == SELECTUP)
{
selectbutton = FALSE;
return(DUMMY_VALUE);
}
return(DUMMY_VALUE);
}
gadgetup(ms)
struct IntuiMessage *ms;
{
extern struct Window *w;
extern struct RastPort *rp;
extern int score1, score2;
extern int turn1, turn2;
extern int peek1, peek2;
extern int movingplayer;
extern int peektime;
extern int percentage;
extern int calling;
struct Gadget *g;
int id;
int result;
g = (struct Gadget *)(ms -> IAddress);
id = g -> GadgetID;
switch(id)
{
case 1:
result = PICKED_NAAH;
break;
case 2:
result = PICKED_YEAH;
if(calling == 1)
{
percentage += 10;
OffMenu(w, 0x3f00); /* Menu 0: all */
OffMenu(w, 0x3f01); /* Menu 1: all */
OffMenu(w, 0x3f02); /* Menu 2: all */
OffMenu(w, 0x3f03); /* Menu 3: all */
writestring(rp, PICK_FIRST_STRING, FALSE);
displaycards(TRUE); /* Display all cards */
writestring(rp, PEEK_STRING, COLOR3);
Delay(50 * peektime); /* Wait... */
writestring(rp, PEEK_STRING, FALSE);
if (movingplayer == 1)
{
peek1 += 1;
score1 -= (score1 * 25 / 100);
update(FIRST, turn1, score1);
writestring(rp, PICK_FIRST_STRING, COLOR1);
}
else
{
peek2 += 1;
score2 -= (score2 * 25 / 100);
update(SECOND, turn2, score2);
writestring(rp, PICK_FIRST_STRING, COLOR2);
}
OnMenu(w, 0x3f00); /* Re-enable Menu 0 */
OnMenu(w, 0x3f01); /* Re-enable Menu 1 */
OffMenu(w, 0x0001); /* Except Item 0! */
OnMenu(w, 0x0021); /* Now enable Menu 1: Item 1 */
OnMenu(w, 0x0041); /* Now enable Menu 1: Item 2 */
displaycards(FALSE); /* Cover all cards */
}
if(calling == 2)
{
SetRast(rp, 6);
OnMenu(w, 0x0001); /* Menu 1: Item 0 */
OnMenu(w, 0x3f02); /* Menu 2: all */
OnMenu(w, 0x3f03); /* Menu 3: all */
OffMenu(w, 0x0021); /* Disable Menu 1 - Item 1 */
OffMenu(w, 0x0041); /* Disable Menu 1 - Item 2 */
result = PICKED_QUIT;
}
if (calling == 3)
{
cleanup();
exit(0);
}
break;
case 3:
result = PICKED_CLICK;
break;
default:
break;
}
return(result);
}